[tool.poetry]
name = "langserve"
version = "0.0.47"
description = ""
readme = "README.md"
authors = ["LangChain"]
license = "LangServe"
repository = "https://github.com/langchain-ai/langserve"
exclude = ["langserve/playground"]
include = ["langserve/playground/dist/**/*"]

[tool.poetry.dependencies]
python = "^3.8.1"
httpx = ">=0.23.0" # May be able to decrease this version
fastapi = {version = ">=0.90.1,<1", optional = true}
sse-starlette = {version = "^1.3.0", optional = true}
httpx-sse = {version = ">=0.3.1", optional = true}
pydantic = ">=1"
langchain = ">=0.0.333"
orjson = ">=2"

[tool.poetry.group.dev.dependencies]
jupyterlab = "^3.6.1"
fastapi = ">=0.90.1"
sse-starlette = "^1.3.0"
httpx-sse = ">=0.3.1"

[tool.poetry.group.typing.dependencies]

[tool.poetry.group.lint.dependencies]
ruff = "^0.1.4"
codespell = "^2.2.0"

[tool.poetry.group.test.dependencies]
pytest = "^7.2.1"
pytest-cov = "^4.0.0"
pytest-asyncio = "^0.21.1"
pytest-mock = "^3.11.1"
pytest-socket = "^0.6.0"
pytest-watch = "^4.2.0"
pytest-timeout = "^2.2.0"

[tool.poetry.group.examples.dependencies]
openai = "^0.28.0"
uvicorn = {extras = ["standard"], version = "^0.23.2"}
fastapi = ">=0.90.1"
sse-starlette = "^1.3.0"
httpx-sse = ">=0.3.1"

[tool.poetry.extras]
# Extras that are used for client
client = ["httpx-sse"]
# Extras that are used for server
server = ["sse-starlette", "fastapi"]
# All
all = ["httpx-sse", "sse-starlette", "fastapi"]

[tool.ruff]
select = [
    "E",  # pycodestyle
    "F",  # pyflakes
    "I",  # isort
]

# Same as Black.
line-length = 88

[tool.ruff.isort]
# TODO(Team): Temporary to make isort work with examples.
# examples assume langserve is available as a 3rd party package
# For simplicity we'll define it as first party for now can update later.
known-first-party = ["langserve"]

[tool.mypy]
disallow_untyped_defs = "True"
ignore_missing_imports = "True"

[tool.coverage.run]
omit = [
    "tests/*",
]


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

[tool.pytest.ini_options]
# --strict-markers will raise errors on unknown marks.
# https://docs.pytest.org/en/7.1.x/how-to/mark.html#raising-errors-on-unknown-marks
#
# https://docs.pytest.org/en/7.1.x/reference/reference.html
# --strict-config       any warnings encountered while parsing the `pytest`
#                       section of the configuration file raise errors.
addopts = "--strict-markers --strict-config --durations=5 -vv"
# Global timeout for all tests. There shuold be a good reason for a test to
# take more than 5 seconds
timeout = 5
asyncio_mode = "auto"
